package com.xzx.shop_front_api.utils;

import com.xzx.shop_front_api.entity.Category;

import java.util.List;
import java.util.stream.Collectors;

/**
 * 商品分类树形结构生成器（递归实现）
 */
public class CategoryTreeGenerator {

    /**
     * 生成树形结构
     * @param allCategories 所有分类的扁平列表（从数据库查询）
     * @return 顶级分类树形结构
     */
    public List<Category> buildTree(List<Category> allCategories) {
        // 筛选顶级分类（parentId=0 且 状态正常）
        List<Category> topCategories = allCategories.stream()
                .filter(cat -> cat.getParentId().equals(0L))
                .collect(Collectors.toList());

        // 为每个顶级分类递归添加子分类
        for (Category top : topCategories) {
            addSubCategories(top, allCategories);
        }
        return topCategories;
    }

    /**
     * 递归为父分类添加子分类
     * @param parent 父分类
     * @param allCategories 所有分类
     */
    private void addSubCategories(Category parent, List<Category> allCategories) {
        // 筛选当前父分类的直接子分类（状态正常）
        List<Category> children = allCategories.stream()
                .filter(cat -> cat.getParentId().equals(parent.getId()))
                .collect(Collectors.toList());

        parent.setChildren(children);

        // 递归处理子分类的子分类
        for (Category child : children) {
            addSubCategories(child, allCategories);
        }
    }
}
